home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 18 / CU Amiga Magazine's Super CD-ROM 18 (1997)(EMAP Images)(GB)[!][issue 1998-01].iso / CUCD / Programming / AmigaE / Src / Tools / Arexx / arexx.e < prev    next >
Text File  |  1992-09-02  |  2KB  |  74 lines

  1. OPT MODULE
  2.  
  3. MODULE 'exec/ports', 'exec/nodes', 'rexx/storage', 'rexxsyslib'
  4.  
  5. RAISE "MEM" IF CreateArgstring()=NIL
  6.  
  7. DEF rexxsysbase
  8.  
  9. EXPORT PROC rx_OpenPort(portname)
  10.   DEF port:PTR TO mp,sig,exc=0
  11.   NEW port
  12.   Forbid()
  13.   IF FindPort(portname)
  14.     exc:="DOUB"
  15.   ELSE
  16.     port.sigtask:=FindTask(0)
  17.     port.flags:=PA_SIGNAL
  18.     port::ln.name:=portname
  19.     port::ln.type:=NT_MSGPORT
  20.     IF (sig:=AllocSignal(-1))=NIL
  21.       exc:="SIG"
  22.     ELSE
  23.       port.sigbit:=sig
  24.       AddPort(port)
  25.     ENDIF
  26.   ENDIF
  27.   Permit()
  28.   IF exc THEN Raise(exc)
  29. ENDPROC port,Shl(1,sig)
  30.  
  31. EXPORT PROC rx_ClosePort(port:PTR TO mp)
  32.   IF port
  33.     FreeSignal(port.sigbit)
  34.     RemPort(port)
  35.     Dispose(port)
  36.   ENDIF
  37. ENDPROC
  38.  
  39. EXPORT PROC rx_GetMsg(port)
  40.   DEF mes:PTR TO rexxmsg
  41.   IF mes:=GetMsg(port)
  42.     rexxsysbase:=mes.libbase
  43.     RETURN mes,Long(mes.args)
  44.   ENDIF
  45. ENDPROC NIL,NIL
  46.  
  47. EXPORT PROC rx_ReplyMsg(mes:PTR TO rexxmsg,rc=0,resultstring=NIL)
  48.   mes.result1:=rc
  49.   mes.result2:=NIL
  50.   IF mes.action AND RXFF_RESULT AND (rc=0) AND (resultstring<>NIL)
  51.     mes.result2:=CreateArgstring(resultstring,StrLen(resultstring))
  52.   ENDIF
  53.   ReplyMsg(mes)
  54. ENDPROC
  55.  
  56. EXPORT PROC rx_HandleAll(interpret_proc,portname) HANDLE
  57.   DEF port=NIL,sig,quit=FALSE,mes,s,rc,rs
  58.   port,sig:=rx_OpenPort(portname)
  59.   REPEAT
  60.     Wait(sig)
  61.     REPEAT
  62.       mes,s:=rx_GetMsg(port)
  63.       IF mes 
  64.         quit,rc,rs:=interpret_proc(s)
  65.         rx_ReplyMsg(mes,rc,rs)
  66.       ENDIF
  67.     UNTIL (mes=NIL) OR (quit=TRUE)
  68.   UNTIL quit
  69.   Raise()
  70. EXCEPT
  71.   rx_ClosePort(port)
  72.   IF exception THEN ReThrow()
  73. ENDPROC
  74.